package lock8;

import java.util.concurrent.TimeUnit;
/**
 * 8锁，就是关于锁的8个问题
 * 3、增加一个普通方法后，先执行发短信还是Hello？先Hello再发短信
 * 4、两个对象，两个同步方法，先发短信还是先打电话？  两个对象 两个调用者，两把锁；所以都可以拿到锁，但是短信延迟了4秒，所以先打电话再发短信
 */

public class Test2 {
    public static void main(String[] args) {
//        两个对象 两个调用者，两把锁
        Phone3 phone = new Phone3();
        Phone3 phone3 = new Phone3();

//        锁的存在
        new Thread(()->{
            phone.sendSms();
        },"A").start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(()->{
            phone3.call();
        },"B").start();
    }
}

class Phone2 {
//    synchronized 锁的对象是方法的调用者。
//    两个方法用的是同一个锁，谁先拿到谁先执行
    public synchronized void sendSms()  {

        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发短信");


    }
    public synchronized void call(){
        System.out.println("打电话");

    }
    //这里没有锁，不是同步方法，不受锁的影响
    public void hello(){
        System.out.println("Hello");
    }

}

/*
Hello
发短信
 */